(function( $ ){
    console.log(23);
    var batchWebUpload;
    //监控文件上传的三个时间点(注意：该段代码必须放在WebUploader.create之前)
    //时间点1：:所有分块进行上传之前（1.可以计算文件的唯一标记;2.可以判断是否秒传）
    //时间点2： 如果分块上传，每个分块上传之前（1.询问后台该分块是否已经保存成功，用于断点续传）
    //时间点3：所有分块上传成功之后（1.通知后台进行分块文件的合并工作）
    WebUploader.Uploader.register({
        // 在文件发送之前request，此时还没有分片（如果配置了分片的话），可以用来做文件整体md5验证。
        'before-send-file': "beforeSendFile",
        // 在分片发送之前request，可以用来做分片验证，如果此分片已经上传成功了，可返回一个rejected promise来跳过此分片上传
        'before-send': 'beforeSend',
        // 在所有分片都上传完毕后，且没有错误后request，用来做分片验证，此时如果promise被reject，当前文件上传会触发错误。
        'after-send-file': 'afterSendFile'
    },{
        // 时间点1：:所有分块进行上传之前调用此函数;
        // 在文件发送之前request，此时还没有分片（如果配置了分片的话），可以用来做文件整体md5验证。
        beforeSendFile: function () {//利用md5File（）方法计算文件的唯一标记符
            //创建一个deffered
            var deferred = WebUploader.Deferred();
            //1.计算文件的唯一标记，用于断点续传和秒传,获取文件前2m的md5值，越小越快，防止碰撞，把文件名文件大小和md5拼接作为文件唯一标识
            (new WebUploader.Uploader()).md5File(file,0,2*1024*1024).progress(function(percentage){

            }).then(function(val){
                fileMd5 = file.size+"-"+val+"-"+file.name;//防止碰撞，把文件名文件大小和md5拼接作为文件唯一标识
                file.fileMd5=fileMd5;
            });
            //返回deffered
            return deferred.promise();
        },

        // 时间点2：如果有分块上传，则 每个分块上传之前调用此函数
        // block:代表当前分块对象
        // 在分片发送之前request，可以用来做分片验证，如果此分片已经上传成功了，可返回一个rejected promise来跳过此分片上传
        beforeSend: function () {// 向后台发送当前文件的唯一标记，用于后台创建保存分块文件的目录
            // 1.请求后台是否保存过当前分块，如果存在，则跳过该分块文件，实现断点续传功能
            var deferred = WebUploader.Deferred();
            //携带当前文件的唯一标记到后台，用于让后台创建保存该文件分块的目录
            // this.owner.options.formData.fileMd5 = block.file.fileMd5;
            return deferred.promise();
        },

        // 时间点3：所有分块上传成功之后调用此函数
        // 在所有分片都上传完毕后，且没有错误后request，用来做分片验证，此时如果promise被reject，当前文件上传会触发错误。
        afterSendFile: function () {// 前台通知后台合并文件
            //1.如果分块上传，则通过后台合并所有分块文件
            //请求后台合并文件
            $.ajax({
                type:"POST",
                url:mergeChunksUrl,
                data:{
                    //文件唯一标记
                    fileMd5:file.fileMd5,
                    //文件名称
                    fileName:file.name
                },
                dataType:"json",
                success:function(response){
                    console.log("合并分片完成");
                    console.log(response);
                    $("#"+file.id).find(".layui-progress-bar").removeClass('layui-bg-blue');
                    element.progress('progress_'+file.id, '100%');
                    $("#"+file.id).find('.percent').html("100%");
                    successNum++;
                    successSize+=file.size;
                }
            });
        }

    });


    // 创建WebUpload对象
    batchWebUpload = WebUploader.create({
        auto:false,
        pick: {
            id: "#filePicker",//指定选择文件的按钮容器，不指定则不创建按钮。注意 这里虽然写的是 id, 不仅支持 id, 还支持 class, 或者 dom 节点。
            //label : title, 官方建议采用 innerHTML 代替
            //innerHTML : title,
            multiple :true //开启文件多选
        },
        flash:'/static/webuploader/Uploader.swf',//ie9一下会自动使用flash上传
        server: "/admin/activity/mediaLibrary/uploadFilew",
        compress: false,
        // 单位字节，如果图片大小小于此值，不会采用压缩。512k  512*1024，如果设置为0，原图尺寸大于设置的尺寸就会压缩；如果大于0，只有在原图尺寸大于设置的尺寸，并且图片大小大于此值，才会压缩
        compressSize: 0,
        fileNumLimit : 10,//验证文件总数量, 超出则不允许加入队列,默认值：undefined,如果不配置，则不限制数量
        fileSizeLimit : 100*1024*1024*1024, //1kb=1024*1024,验证文件总大小是否超出限制, 超出则不允许加入队列。
        fileSingleSizeLimit :10*1024*1024*1024, //验证单个文件大小是否超出限制, 超出则不允许加入队列。
        chunked:true,//是否开启分片上传
        threads:3,
        chunkSize:5*1024*1024,//如果要分片，每一片的文件大小
        prepareNextFile:false//在上传当前文件时，准备好下一个文件,请设置成false，不然开启文件多选你浏览器会卡死
    });


    //当文件上传成功时触发。file {File} File对象, response {Object}服务端返回的数据
    batchWebUpload.on('uploadSuccess',function(file,response){
        new $.zui.Messager('上传完成，服务端返回信息请按F12,看控制台', {
            icon: 'heart',
            placement: 'center' // 定义显示位置
        }).show();
        console.log(file);
        if(response.success){
            console.log(response);
        }
    });

    //错误类型。文件验证不通过时触发
    //错误类型说明：Q_EXCEED_NUM_LIMIT 上传文件超过限制的数量
    //Q_EXCEED_SIZE_LIMIT文件总大小超出限制
    //Q_TYPE_DENIED 当文件类型不对
    batchWebUpload.on("error",function(type,file){
        var msg = "";
        console.log(type);
        if (type=="Q_TYPE_DENIED"){
            msg = "只能上传gif,jpg,jpeg,bmp,png格式文件";
        }else if(type=="Q_EXCEED_SIZE_LIMIT"){
            msg = "所有的文件大小总和不能超过10M";
        }else if(type=='F_EXCEED_SIZE'){
            msg = "单个文件大小不能超过1M";
        }else if(type=='Q_EXCEED_NUM_LIMIT'){
            msg = typeName+"最多只能上传10个";
        }else if(type=='F_DUPLICATE'){
            msg = file.name+"已经在上传队列，请勿重复上传";
        }else{
            msg = "上传出错";
        }
        new $.zui.Messager(msg, {
            icon: 'heart',
            placement: 'center' // 定义显示位置
        }).show();
    });


    // 文件加入队列
    // batchWebUpload.on("fileQueued",function(file){
    // });

    // 从文件队列移除
    // batchWebUpload.on('fileDequeued', function( file ) {
    // });

    // 上传之前
    batchWebUpload.on('uploadBeforeSend', function( block, data, headers ) {
        console.log(block);
        console.log(data);
        console.log(headers);

        // data.fileMd5 = block.file.fileMd5;
        // //block.file.chunks = block.chunks;//当前文件总分片数量
        // data.chunks = block.file.chunks;
    });






})( jQuery );
